package com.rock.common.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ObjUtil {
	
	public static Object copyObject(Object obj) throws Exception{
		//获取初级对象
		Class<? extends Object> clazz=obj.getClass();	
		//获取属性
		Field[] fields=clazz.getDeclaredFields();
		//获取构造器
		Constructor constructor=clazz.getConstructor(new Class[]{});
		//创建一个实例
		Object instance=constructor.newInstance(new Object[]{});
		for(Field f:fields){
			//获取属性的name
			String fname=f.getName();
			//获取属性类型
			Class<?> type=f.getType();
			//获取属性的set方法
			String setMethodName="set"+fname.substring(0, 1).toUpperCase()+fname.substring(1);
			//获取属性的get方法
			String getMethodName="get"+fname.substring(0, 1).toUpperCase()+fname.substring(1);
			Method gmethod=clazz.getDeclaredMethod(getMethodName, null);
			//调用get方法获得属性值
			Object gresult=gmethod.invoke(obj, null);
			//调用set方法写入新对象
			Method smethod=clazz.getDeclaredMethod(setMethodName, new Class[]{gmethod.getReturnType()});
			smethod.invoke(instance, new Object[]{gresult});		
		}
		return instance;
	}

}
